# 使用官方的 Node.js 镜像作为基础镜像
FROM node:18-alpine AS base

# 创建一个新的构建阶段，用于安装依赖项
FROM base AS deps

# 安装必要的系统依赖项
RUN apk add --no-cache libc6-compat

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 yarn.lock 文件
COPY package.json yarn.lock ./

# 设置代理（如果需要）
ENV HTTP_PROXY=http://192.168.56.61:58591
ENV HTTPS_PROXY=http://192.168.56.61:58591

# 设置 npm 镜像源
RUN yarn config set registry 'https://registry.npmmirror.com/'

# 安装依赖项
RUN yarn install

# 创建一个新的构建阶段，用于构建应用程序
FROM base AS builder

# 安装 git（如果需要）
RUN apk update && apk add --no-cache git

# 设置环境变量
ENV OPENAI_API_KEY="nd-Q9E2YZv0Vwv6kbm_RvD9NB-sF2bsNaTivtXVSaE9"
ENV GOOGLE_API_KEY=""
ENV CODE=""

# 设置工作目录
WORKDIR /app

# 复制 node_modules 目录和依赖文件
COPY --from=deps /app/node_modules ./node_modules
COPY --from=deps /app/package.json ./package.json
COPY --from=deps /app/yarn.lock ./yarn.lock

# 复制所有源代码
COPY . .

# 构建应用程序
RUN yarn build

# 创建一个新的构建阶段，用于运行应用程序
FROM base AS runner

# 设置工作目录
WORKDIR /app

# 安装 proxychains-ng（如果需要）
RUN apk add proxychains-ng

# 设置环境变量
ENV OPENAI_API_KEY="nd-Q9E2YZv0Vwv6kbm_RvD9NB-sF2bsNaTivtXVSaE9"
ENV GOOGLE_API_KEY=""
ENV CODE=""

# 复制构建输出
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/.next/server ./.next/server

# 复制 node_modules 目录和依赖文件
COPY --from=deps /app/node_modules ./node_modules
COPY --from=deps /app/package.json ./package.json
COPY --from=deps /app/yarn.lock ./yarn.lock

# 暴露端口
EXPOSE 8080

# 启动应用程序
CMD ["yarn", "start"]